package com.regexdemo;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexDemo8 {
    public static void main(String[] args) {
        /*
        有如下文本，请按照要求爬取数据。
            Java自从95年问世以来，经历了很多版本，目前企业中用的最多的是Java8和Java11，
            因为这两个是长期支持版本，下一个长期支持版本是Java17，相信在未来不久Java17也会逐渐登上历史舞台。
         需求1:爬取版本号为8,11,17的Java文本，但是只要Java，不显示版本号。
         需求2:爬取版本号为8,11,17的Java文本。正确爬取结果为: Java8 Java11 Java17 Java17
         需求3:爬取除了版本号为8,11,17的Java文本，
         */
        String str="Java自从95年问世以来，经历了很多版本，目前企业中用的最多的是Java8和Java11，因为这两个是长期支持版本，下一个长期支持版本是Java17，相信在未来不久Java17也会逐渐登上历史舞台。";

        //1.爬取版本号为8,11,17的Java文本，但是只要Java，不显示版本号。
        //定义正则表达式
        //?理解为前面的数据Java
        //=表示在Java后面要跟随的数据
        //但是在获取的时候，只获取前半部分
        String regex1="Java(?=8|11|17)";
        Pattern pattern1 = Pattern.compile(regex1);
        Matcher matcher1 = pattern1.matcher(str);
        while (matcher1.find()){
            String group = matcher1.group();
            System.out.println(group);
        }
        System.out.println("=========");

        //2.爬取版本号为8,11,17的Java文本。正确爬取结果为: Java8 Java11 Java17 Java17
        String regex2="Java(?:8|11|17)";
        Pattern pattern2 = Pattern.compile(regex2);
        Matcher matcher2 = pattern2.matcher(str);
        while (matcher2.find()){
            String group = matcher2.group();
            System.out.println(group);
        }
        System.out.println("=========");

        //3.爬取除了版本号为8,11,17的Java文本，
        String regex3="Java(?!8|11|17)";
        Pattern pattern3 = Pattern.compile(regex3);
        Matcher matcher3 = pattern3.matcher(str);
        while (matcher3.find()){
            String group = matcher3.group();
            System.out.println(group);
        }
        System.out.println("=========");
    }
}
